package cn.me.alphamq.common.enumeration;

/**
 * 事件的 code 的枚举类
 *
 * @author f
 */
public enum EventCodeEnum {
    REGISTRY_REQ(1, "注册请求"),
    UN_REGISTRY_REQ(2, "注销请求"),
    HEART_BEAT_REQ(3, "心跳请求"),
    ERROR_ACCOUNT_RESP(101, "用户名或密码错误"),
    EMPTY_IDENTIFY_RESP(102, "服务实例标识为空"), // TODO 这个事件 code 不可能发出来，之后需要删除对这个 code 的处理
    UN_REGISTRY_RESP(103, "服务正常注销"), // TODO 这个事件 code 不可能发出来，之后需要删除对这个 code 的处理
    REGISTRY_SUCCESS_RESP(104, "服务注册成功"),
    HEART_BEAT_SUCCESS_RESP(105, "服务心跳成功"),

    START_REPLICATION_REQ(1001, "从节点开启复制的请求"),
    SLAVE_REPLICATION_ACK_REQ(1002, "从节点复制完成发送的 ack 请求"),
    MASTER_START_REPLICATION_RESP(1101, "主节点开启复制"),
    MASTER_REPLICATION_MSG_RESP(1102, "主节点发送复制消息"),

    NODE_REPLICATION_ACK_REQ(2001, "节点完成复制发送的 ack 请求"),
    NODE_REPLICATION_MSG_RESP(2101, "非尾节点发送复制消息"),

    PULL_BROKER_ADDRESS_REQ(3001, "拉取 broker 的地址的请求"),
    PUSH_MSG_REQ(3002, "推送消息的请求"),
    CONSUME_MSG_REQ(3003, "消费消息的请求"),
    CONSUME_SUCCESS_REQ(3004, "消费成功的请求"),
    CREATE_TOPIC_REQ(3005, "创建 topic 的请求"),
    RETRY_CONSUME_MSG_REQ(3006, "重试消费消息的请求"),
    PUSH_DELAY_MSG_REQ(3007, "发送延迟消息的请求"),
    PUSH_TX_MSG_REQ(3008, "发送事务消息的请求"),
    TX_CALLBACK_CHECK_REQ(3009, "事务回调检查的请求，来自 broker"),
    PULL_BROKER_ADDRESS_RESP(3101, "拉取 broker 的地址的响应"),
    PUSH_MSG_RESP(3102, "推送消息的响应"),
    CONSUME_MSG_RESP(3103, "消费消息的响应"),
    CONSUME_SUCCESS_RESP(3104, "消费成功的响应"),
    CREATE_TOPIC_RESP(3105, "创建 topic 的响应"),
    RETRY_CONSUME_MSG_RESP(3106, "重试消费消息的响应"),
    PUSH_DELAY_MSG_RESP(3107, "发送延迟消息的响应"),
    PUSH_TX_MSG_RESP(3108, "发送事务消息的响应"),
    TX_CALLBACK_CHECK_RESP(3109, "事务回调检查的响应，来自 生产者"),

    START_SYNC_REQ(4001, "从 broker 让主 broker 开启同步的请求"),
    START_SYNC_RESP(4101, "从 broker 让主 broker 开启同步的响应，同时也表示从节点复制完毕"),

    SHIFT_TO_MASTER_REQ(5001, "从 broker 转变成主 broker 的请求，无需响应"),
    CHANGE_MASTER_REQ(5002, "从 broker 更换主 broker 的请求，无需响应"),

    LIST_ALL_TOPIC_INFO_REQ(6001, "控制台列举所有 topic 信息的请求"),
    LIST_ALL_TOPIC_INFO_RESP(6101, "控制台列举所有 topic 信息的响应"),
    ;

    private final int code;
    private final String desc;

    EventCodeEnum(int code, String desc) {
        this.code = code;
        this.desc = desc;
    }

    public int getCode() {
        return code;
    }

    public String getDesc() {
        return desc;
    }
}
